package com.ly.common.utils.erp;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import lombok.experimental.Accessors;
import org.apache.poi.ss.formula.functions.T;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页工具类
 *
 * @author cxl
 */
@Data
@Accessors ( chain = true )
@SuppressWarnings ( "unchecked" )
public class ReturnPage {

    public List<T> records;

    public long total;

//   public static Page getReturnPage(Page page, List list) {
//      int currentPage = (int) page.getPage();
//      int pageSize = (int) page.getLimit();
//      Page returnPage = new Page();
//      int size = list.size();
//
//      // 处理 pageSize 为0的情况
//      if (pageSize == 0) {
//         pageSize = 1;
//      }
//
//      if (pageSize > size) {
//         pageSize = size;
//      }
//      if (size > 0) {
//         int maxPage = size % pageSize == 0 ? size / pageSize : size / pageSize + 1;
//
//         if (currentPage > maxPage) {
//            currentPage = maxPage;
//         }
//
//         int curIds = currentPage > 1 ? (currentPage - 1) * pageSize : 0;
//         List pageList = new ArrayList<>();
//
//         for (int i = 0; i < pageSize && curIds + i < size; i++) {
//            pageList.add(list.get(curIds + i));
//         }
//
//         returnPage.setCurrent(currentPage).setSize(pageSize).setTotal(list.size()).setRecords(pageList);
//      }
//      return returnPage;
//   }

    public static Page getReturnPage ( Page page, List list ) {
        int currentPage = ( int ) page.getCurrent (); // 当前页码
        int pageSize = ( int ) page.getSize (); // 页面大小
        Page returnPage = new Page ();
        int size = list.size (); // 列表总长度
        // 处理 pageSize 为0的情况
        if ( pageSize == 0 ) {
            pageSize = 1;
        }
        if ( size > 0 ) {
            int maxPage = ( int ) Math.ceil ( ( double ) size / pageSize ); // 最大页数
            // 确保 currentPage 不小于1
            currentPage = Math.max ( currentPage, 1 );
            // 确保 currentPage 不超过 maxPage
            currentPage = Math.min ( currentPage, maxPage );
            int curIds = ( currentPage - 1 ) * pageSize; // 当前页起始索引
            List pageList = new ArrayList<> ();
            for ( int i = 0; i < pageSize && curIds + i < size; i++ ) {
                pageList.add ( list.get ( curIds + i ) );
            }
            returnPage.setCurrent ( currentPage ).setSize ( pageSize ).setTotal ( size ).setRecords ( pageList );
        }
        return returnPage;
    }


}
